#include <iostream>
using namespace std;
// 类定义中delete关键字和default关键字的作用
// 1. delete关键字用于禁止某些函数的使用，通常用于禁止拷贝构造函数和拷贝赋值运算符，以防止对象的拷贝操作。
// 2. default关键字用于显式地请求编译器生成默认的函数实现，通常用于默认构造函数、拷贝构造函数和拷贝赋值运算符。
// 场景：1. 不可拷贝的类，可移动的类：用delete禁止拷贝操作，用default允许移动操作。
//       2. 只能栈上分配的类：用delete禁止动态分配操作符new和delete。
//       3. 恢复被抑制的函数：用default恢复被delete抑制的函数。

// 不可拷贝的类，可移动的类
class NonCopyableMovable
{
public:
    NonCopyableMovable() = default;                                     // 默认定义构造函数
    NonCopyableMovable(const NonCopyableMovable &) = delete;            // 禁止拷贝构造函数
    NonCopyableMovable &operator=(const NonCopyableMovable &) = delete; // 禁止拷贝赋值运算符
    NonCopyableMovable(NonCopyableMovable &&) = default;                // 允许移动构造函数
    NonCopyableMovable &operator=(NonCopyableMovable &&) = default;     // 允许移动赋值运算符
};
int main()
{
    return 0;
}